The approaches described in this section could be pursued, but are not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated herein, the approaches described in this section are not prior art to the claims in this application and are not admitted to be prior art by inclusion in this section.
Network File System protocol (NFS) is a network communications protocol that enables data files stored in a file server accessible to any computer that is coupled to a network. NFS version 3 is defined in Request for Comments (RFC) 1813.
NFS can be implemented in a wide area network (WAN) environment in which client computers are physically separated from file servers by long distances. WAN environments may be characterized by high latency, meaning that clients experience noticeable delays in waiting for server responses after sending data. To address the high latency in WAN environments, some clients use asynchronous WRITE operations under NFS. However, when the clients also expect to transfer data at high rates of throughput, inherent aspects of NFS may cause undesirable delays in completing data transfer operations. For example, the data buffer sizes allowed in NFS for asynchronous WRITE operations, typically 32 kilobytes (Kb), are too small to accomplish high throughput data transfers and require clients to break up a single large data transfer operation into multiple smaller operations, which increases processing overhead at the client and increases the number of requests and replies that must traverse the WAN. It has been observed that LINUX implementations typically use a buffer size of 512 KB and SOLARIS clients use 128 KB for write. Thus the clients limit the amount of data traversing to the server, also limiting the effective throughput to (data-in-the-air) per round trip; the limit may be as little as 6 MB/sec on a T1/80 connection with a 512 KB buffer or 1.5 MB/sec with 128 KB in-the-air. If the client is attempting to perform a copy operation for a large file, this performance is poor.
CIFS optimization approaches address a similar problem, but typically rely upon OPEN operations and CLOSE operations for error reporting. This approach is not entirely reliable because few CIFS applications are programmed to check for errors as part of a CLOSE operation.